package com.itheima.d3_thread_safe;

/**
 * 目标：模拟线程安全问题。
 *
 * 什么是线程安全问题？
 *      多个线程，同时操作同一个共享资源的时候，可能会出现业务安全问题。
 *
 * 案例：取钱的线程安全问题
 * 需求：
 * 小明和小红是一对夫妻，他们有一个共同的账户，余额是10万元，模拟2人同时去取钱10万。
 * 分析：
 * ①：需要提供一个账户类，接着创建一个账户对象代表2个人的共享账户。
 * ②：需要定义一个线程类（用于创建两个线程，分别代表小明和小红）。
 * ③：创建2个线程，传入同一个账户对象给2个线程处理。
 * ④：启动2个线程，同时去同一个账户对象中取钱10万。
 *
 *  线程安全问题出现的原因？
 * 存在多个线程在同时执行
 * 同时访问一个共享资源
 * 存在修改该共享资源
 */
public class ThreadTest {
    public static void main(String[] args) {
         // 1、创建一个账户对象，代表两个人的共享账户。
        Account acc = new Account("ICBC-110", 100000);
        // 2、创建两个线程，分别代表小明 小红，再去同一个账户对象中取钱10万。
        //模拟小明和小红用同一个账户，所以两个线程要接收账户对象为参数，所以DrawThread实现类要提供相应的有参构造器
        //并且给线程命名
        new DrawThread(acc, "小明").start(); // 小明
        new DrawThread(acc, "小红").start(); // 小红
    }
}
